#include "LPC11xx.h"
#include "beep.h"

void beep_init(void)
{
  //1. 启用定时器CT32B1工作时钟
  LPC_SYSCON->SYSAHBCLKCTRL |= 1 << 10;
  
  //2. 启用IOCON控制器时钟
  LPC_SYSCON->SYSAHBCLKCTRL |= 1 << 16;
  
  //3. 配置PIO1_1引脚功能（定时器输出）
  LPC_IOCON->R_PIO1_1 |= 3;

  //4. 配置比较控制寄存器，当计数器达到比较值1后复位
  LPC_TMR32B1->MCR |= 1 << 4;

  //5. 配置外部比较寄存器，当计数器达到比较值0后输出高电平
  LPC_TMR32B1->EMR |= 2 << 4;
  
  //6. 启用PWM模式
  LPC_TMR32B1->PWMC |= 1;
}

void beep_tone(int hz)
{
  //停止定时器
  LPC_TMR32B1->TCR &= ~1;
  
  if (hz != 0)
  {
    //配置周期（频率）
    LPC_TMR32B1->MR1 = SystemCoreClock/hz;
    //配置占空比（50）
    LPC_TMR32B1->MR0 = SystemCoreClock/2/hz;

    //启动定时器
    LPC_TMR32B1->TCR |= 1;
    //复位计数器
    LPC_TMR32B1->TCR |= 2;
    LPC_TMR32B1->TCR &= ~2;
  }
}
